#ifndef WIDGET_H
#define WIDGET_H

#include "CAddStuInfoDialog.h"
#include "CDataSourceSQLite.h"
#include <QWidget>
#include <QStandardItemModel>
#include <QMenu>
#include "CQSpinBoxDelegate.h"
#include "CQComboBoxDelegate.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

//宏定义 表格列数
const int CONST_COLUMN_SIZE = 7;

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    //初始化界面
    void initUi();
    //把信息添加到表中
    bool appendToModel(CStuInfo &stuInfo);
                                                       //这个类文件是用来描述主界面的
private slots:
    void on_btn_Add_clicked();

    //自定义槽函数
    bool slot_addInfo(CStuInfo &stuInfo);//接收弹出界面添加信号
    bool slot_updateInfo(CStuInfo &stuInfo);//接收弹出界面修改信号

    bool slot_itemChanged(QStandardItem* item);//对应模型中某个项的数据(例如文本、图标、颜色)发生改变时

    bool slot_popMenu(const QPoint &pos);

    bool slot_actUpdate();
    bool slot_actDelete();

    //系统设置点击操作槽函数
    void on_chk_SelectAll_clicked(bool checked);
    void on_btn_Delete_clicked();

private:
    Ui::Widget *ui;
    CDataSourceSQLite *m_dataSource; //数据源
    QStandardItemModel *m_standardModel; //model

    CAddStuInfoDialog *m_addStuInfo;//添加学生信息窗口

    CQSpinBoxDelegate* m_spinBoxDelegate;//自定义委托
    CQComboBoxDelegate* m_comboBoxDelegate;//自定义委托

    //设置弹出菜单栏
    QMenu *m_menu;
    QAction *m_actUpdate;
    QAction *m_actDelete;
};
#endif // WIDGET_H
